package com.office.automate.service.def.administration;

import java.util.HashMap;
import java.util.List;

import com.office.automate.exception.framework.FrontierVisibleException;
import com.office.automate.model.administration.Branch;
import com.office.automate.model.administration.Division;
import com.office.automate.model.administration.PublicHoliday;
import com.office.automate.model.administration.SecurityLevel;

/**
 * 
 * @author Dasan.Weerarathne
 *
 */
public interface AdministrationService {

	public HashMap<String, FrontierVisibleException> validateSecurityLevelDetails(SecurityLevel aSecurityLevel) throws FrontierVisibleException;

	public SecurityLevel addSecurityLevel(SecurityLevel aSecurityLevel) throws FrontierVisibleException;

	public List<SecurityLevel> getAvailableSecurityLevels() throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getAvailableSecurityLevelsPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public void deleteSecurityLevel(SecurityLevel aSecurityLevel) throws FrontierVisibleException;

	public int getAvailableSecurityLevelRecordCount() throws FrontierVisibleException;

	public int getAvailableBranchDetailRecordCount() throws FrontierVisibleException;

	public List<Branch> getAvailableBranches() throws FrontierVisibleException;

	public List<Division> getAvailableDivisions() throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getAvailableBranchesPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateBranchDetails(Branch branch) throws FrontierVisibleException;

	public Branch addBranch(Branch branch) throws FrontierVisibleException;

	public void deleteBranch(Branch branch) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateDivisionDetails(Division division) throws FrontierVisibleException;

	public Division addDivision(Division aDivision) throws FrontierVisibleException;

	public void deleteDivision(Division aDivision) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getAvailableDivisionsPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableDivisionDetailRecordCount() throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validatePublicHolidayDetails(PublicHoliday publicHoliday) throws FrontierVisibleException;

	public PublicHoliday addPublicHoliday(PublicHoliday publicHoliday) throws FrontierVisibleException;

	public int getAvailablePublicHolidayRecordCount() throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getAvailablePublicHolidayPage(int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public void deletePublicHoliday(long holidayEntryId) throws FrontierVisibleException;

}
